package com.hanhai.zrb.api.biz.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageInfo;
import com.hanhai.zrb.model.user.UserStatisticDetail;
import com.hanhai.zrb.model.user.dto.UserStatisticDetailDto;
import com.hanhai.zrb.model.usercenter.CommonStatistic;
import com.hanhai.zrb.model.usercenter.IntentionStatistic;

public interface UserStatisticDetailService {

	/**
	 * 用户收藏
	 * 
	 * @param userCollection
	 * @return
	 */
	boolean doCollection(UserStatisticDetail userStatisticDetail);
	
	/**
	 * 取消收藏
	 * @param userCollection
	 * @return
	 */
	boolean doCancelCollection(UserStatisticDetail userStatisticDetail);
	
//	@Deprecated
//	List<UserStatisticDetail> queryByUserId(Long userId);
	
	/**
	 * 获取用户指定类型的所有收藏
	 * @param userId
	 * @param type
	 * @return
	 */
	List<UserStatisticDetail> queryByUserIdAndType(Long userId,UserStatisticDetail.Type type);
	
//	/**
//	 * 获取新闻的收藏总数
//	 * @param informationId
//	 * @return
//	 */
//	
//	Long getInformationCollectionCounter(Long informationId);
	
	
	/**
	 * 获取指定类型和id的的收藏总数
	 * @param bizId
	 * @param type
	 * @return
	 */
	Long getCollectionCounter(Long bizId,UserStatisticDetail.Type type);
	
//	/**
//	 * 批量获取咨询的收藏总数
//	 * @param informationIdList
//	 * @return
//	 */
//	@Deprecated
//	Map<Long,Long> getInformationCollectionCounterMap(List<Long> informationIdList);
	
	Map<Long,Long> getCollectionCounterMap(List<Long> idList,UserStatisticDetail.Type type);
	
//	/**
//	 * 移除新闻咨询的收藏总数
//	 * @param infoId
//	 */
//	@Deprecated
//	void removeAllUserCollection(Long infoId);
	
	/**
	 * 移除制定类型的收藏总数
	 * @param infoId
	 * @param type
	 */
	void removeAllUserCollectionByType(Long infoId,UserStatisticDetail.Type type);
	
	/**
	 * 按条件分业查询收藏
	 * @param userCollectionDto
	 * @return
	 */
	PageInfo queryPageByCondition(UserStatisticDetailDto userStatisticDetailDto);
	
	/**
	 * 条件查询
	 * @param createTime
	 * @param forward
	 * @param userId
	 * @param type
	 * @param limit
	 * @return
	 */
	List<UserStatisticDetail> queryByCondition(Date createTime,boolean forward,Long userId,Integer type,Integer limit);

	/**
	 * 查询用户收藏的指定条数的项目信息
	 * 
	 * @param userId
	 * @param maxCreateTime
	 * @param limit
	 * @return
	 */
	List<CommonStatistic> getUserCollectionProject(Long userId,Date maxCreateTime,Integer limit);
		
	
	/**
	 * 根据条件分页查询收藏的项目
	 * 返回分页结果
	 * 
	 * @param dto
	 * @return
	 */
	PageInfo getUserCollectionProjectPage(UserStatisticDetailDto dto);
	/**
	 * 根据条件分页查询收藏的意向
	 * 返回分页结果
	 * 
	 * @param dto
	 * @return
	 */
	PageInfo getUserCollectionIntentionPage(UserStatisticDetailDto dto);
	/**
	 * 根据条件分页查询收藏的资金
	 * 返回分页结果
	 * 
	 * @param dto
	 * @return
	 */
	PageInfo getUserCollectionFundPage(UserStatisticDetailDto dto);
	
	Boolean isCollected(Long uid,Long id,Integer type);
	
	
	int getCountByType(Integer type,Long userId);
	
	List<CommonStatistic> getUserCollectionFund(Long userId,Date maxCreateTime,Integer limit);
	
	List<IntentionStatistic> getUserCollectionIntention(Long userId,Date maxCreateTime,Integer limit);
	
}
